var vm = new Vue({
    el:"#app",
    data:{
        parentId:"",
        parentName:"",
        level:"",
        parentIds:"",
        parentNames:"",
        layerIndex:0,
        isShowParentTreeMenu:false,
        isShowMenuForm:false,
        isShowMenuIconAndUrl:true,
        resourceName:"",
        isShowSetPermForm:false
    },
    methods:{
        /**
         * layer弹出div层
         * @param title
         * @param contentDivId
         * @param w
         * @param h
         */
        showLayer:function (title,contentDivId,w,h) {
            if (title == null || title == '') {
                title = false;
            }
            if (w == null || w == '') {
                w = 800;
            }
            if (h == null || h == '') {
                h = ($(window).height() - 50);
            }
            layer.open({
                type: 1,//页面层
                maxmin: true,
                area: [w + 'px', h + 'px'],
                title: title,
                content: $layui("#" + contentDivId)
            });
        },
        /**
         * layer弹出页面层
         * @param title
         * @param url
         * @param w
         * @param h
         */
        layerShowPage:  function (title,url,w,h){
            if (title == null || title == '') {
                title=false;
            }
            if (w == null || w == '') {
                w=800;
            }
            if (h == null || h == '') {
                h=($(window).height() - 50);
            }
            this.layerIndex = layer.open({
                type: 2,
                area: [w+'px', h +'px'],
                fix: false, //不固定
                maxmin: true,
                scrollbar: false,//屏蔽游览器滚动条
                shade:0.4,
                title: title,
                content: url
            });
        },
        /**
         * 初始化bootstrapTable
         */
        initTable:function(){
            var _this = this;
            $('#tbSysMenu').bootstrapTable($.extend(bootstrapTableOption,{
                url: g_comm.manager_url+'/sysResource/list',           //请求后台的URL（*）
                toolbar: '#toolbar',                          //工具按钮用哪个容器
                queryParams: _this.queryParams,               //传递参数（*）
                uniqueId: "id",                     //每一行的唯一标识，一般为主键列
                columns: [{
                    checkbox: true
                }, {
                    field: 'name',
                    title: '资源名称'
                }, {
                    field: 'url',
                    title: '资源URL'
                }, {
                    field: 'perms',
                    title: '权限标识'
                }, {
                    field: 'parentName',
                    title: '上级菜单'
                }, {
                    field: 'icon',
                    title: '图标',
                    align: 'center',
                    valign: 'middle',
                    formatter:function(value,row,index){
                        return row.icon == null ? '' : '<i class="'+row.icon+'"></i>';
                    }
                }, {
                    field: 'type',
                    title: '类型',
                    align: 'center',
                    valign: 'middle',
                    formatter:function(value,row,index){
                         if(row.type === 0){
                            return '<span class="label label-primary">系统资源</span>';
                         }
                         if(row.type === 1){
                            return '<span class="label label-success">菜单</span>'
                         }
                         if(row.type === 2){
                            return '<span class="label label-warning">按钮</span>'
                         }
                    }
                }, {
                    field: 'level',
                    title: '资源等级',
                    align: 'center',
                    valign: 'middle'
                }, {
                    field: 'createTime',
                    title: '创建时间',
                    formatter:function(value,row,index){
                        if(value!=null){
                            return new Date(value).toString("yyyy-MM-dd HH:mm:ss");
                        }else{
                            return "";
                        }
                    }
                }, {
                    field: 'updateTime',
                    title: '更新时间',
                    formatter:function(value,row,index){
                        if(value!=null){
                            return new Date(value).toString("yyyy-MM-dd HH:mm:ss");
                        }else{
                            return "";
                        }
                    }
                }
                ],
                onLoadSuccess: function(data){  //加载成功时执行
                    if(data.code==500){
                        layerAlert(data.msg);
                    }
                }
            }));
        },
        del:function(){
            //获取选中的行
            var selectRows = $('#tbSysMenu').bootstrapTable('getSelections');
            if(selectRows.length==0){
                layer.alert('请选择要删除的数据!',{
                    title: '提示框',
                    icon:0
                });
                return;
            }
            var ids = "";
            $(selectRows).each(function (index, obj) {
                ids+=obj.id+",";
            });
            ids=ids.substring(0,ids.length-1);
            parent.layer.confirm("你确定是要删除吗！", {btn: ['确定','取消']},
                function(){//确定事件
                    //关闭confirm Dialog
                    parent.layer.closeAll('dialog');
                    $.ajax({
                        url: g_comm.manager_url+"/sysResource/delete",
                        data:{ids:ids},
                        success: function(r){
                            if(r.code == 0){
                                layer.msg('删除成功！', {icon: 1});
                                //重新刷新数据
                                $('#tbSysMenu').bootstrapTable('refresh');
                                vm.initZtree();
                            }else{
                                layer.alert(r.msg,{
                                    title: '提示框',
                                    icon:0
                                });
                            }
                        }
                    });
                });
        },

        /**
         * 查询参数
         * @param params
         */
        queryParams:function (params) {
            return {   //这里的键的名字和控制器的变量名必须一直，这边改动，控制器也需要改成一样的
                limit: params.limit,   //页面大小
                offset: params.offset,  //页码
                name:this.resourceName //资源名称
            };
        },

        /**
         * 初始化控件
         */
        initControl:function(){
            //获取鼠标焦点
            $("#name").focus();
        },

        /**
         * 初始化Ztree
         */
        initZtree:function(){
            var setting = {
                data: {
                    simpleData: {
                        enable: true
                    }
                },
                callback: {
                    beforeClick: this.zTreeBeforeClick
                }
            };

            $.ajax({
                url:g_comm.manager_url+'/sysResource/treeList',
                success:function(result){
                    if(result.code == 0){
                        //渲染Ztree树形菜单
                        $.fn.zTree.init($("#treeMenu"), setting, result.data);
                    }else{
                        layer.alert(result.msg,{
                            title: '提示框',
                            icon:0
                        });
                        return false;
                    }
                }
            });
        },

        /**
         * 点击treeNode节点之前
         */
        zTreeBeforeClick:function(treeId, treeNode, clickFlag){
            //获取选中的菜单ID
            var id=treeNode.id;
            $('#tbSysMenu').bootstrapTable("refresh",{query: {id: id}});
        },

        /**
         * 新增
         */
        add:function(){
            $("#menuForm")[0].reset();//重置Form表单
            $("#type").select2().val("1");
            this.isShowMenuIconAndUrl = true;
            this.showLayer("新增系统资源","menuCreateOrUpdate",800,700);
        },

        /**
         * 修改
         */
        edit:function(){
            //获取选中的行
            var selectRows = $('#tbSysMenu').bootstrapTable('getSelections');
            if(selectRows.length==0){
                layer.alert('请选择要编辑的数据!',{
                    title: '提示框',
                    icon:0
                });
                return;
            }
            if(selectRows.length>1){
                layer.alert('一次只能编辑的一条数据!',{
                    title: '提示框',
                    icon:0
                });
                return;
            }

            var menuData = selectRows[0];

            //填充Form表单数据
            loadData(menuData,"menuForm");
            $("#type").select2().val(menuData.type);
            if(menuData.type=="2"){
                this.isShowMenuIconAndUrl = false;
            }else {
                this.isShowMenuIconAndUrl = true;
            }
            this.showLayer("编辑系统资源","menuCreateOrUpdate",800,700);
        },

        /**
         * 显示菜单图标
         */
        showMenuIcon:function(){
            this.layerShowPage("选择图标","views/sys/resource_icon.html",600,400);
        },


        /**
         * 加载菜单树
         */
        loadMenuTree:function(){
            var setting = {
                view: {
                    dblClickExpand: false
                },
                data: {
                    simpleData: {
                        enable: true
                    }
                },
                callback: {
                    beforeClick: function(){
                        return true;
                    },
                    onClick: function(e, treeId, treeNode){
                        $("#parentName").val(treeNode.name);
                        $("#parentId").val(treeNode.id);
                        var parentNamesText="";
                        var parentIdsText="";
                        vm.getParentIds(treeNode,parentIdsText);
                        vm.getParentNames(treeNode,parentNamesText);
                        if(vm.parentIds != ""){
                            $("#parentIds").val(vm.parentIds);
                            //清空
                            vm.parentIds="";
                        }
                        if(vm.parentNames != ""){
                            $("#parentNames").val(vm.parentNames);
                            //清空
                            vm.parentNames="";
                        }
                        if(treeNode.menuLevel!=null && treeNode.menuLevel!=""){
                            $("#level").val(treeNode.menuLevel);
                        }
                        //关闭最新弹出的层，直接获取layer.index即可
                        layer.close(layer.index);
                    }
                }
            };

            $.ajax({
                url:g_comm.manager_url+'/sysResource/treeList',
                data:{'menuType':1},
                success:function(result){
                    if(result.code == 0){
                        //渲染Ztree树形菜单
                        $.fn.zTree.init($("#parentTreeMenu"), setting, result.data);
                        vm.showLayer("菜单列表","parentTreeDiv",300,600);
                    }else{
                        layer.alert(result.msg,{
                            title: '提示框',
                            icon:0
                        });
                        return false;
                    }
                }
            });
        },
        /** 获得当前选中节点的所有父ID
         * @param node
         * @param idText
         */
        getParentIds:function(node,idText){
            if(node != null){
                idText +=  node.id + ">";
                var parentNode = node.getParentNode();
                vm.getParentIds(parentNode,idText);//递归
            }else {
                if(idText!=""){
                    idText=idText.substring(0,idText.length-1);
                }
                //根节点
                vm.parentIds = idText;
            }
        },
        /** 获得当前选中节点的所有父名称
         * @param node
         * @param nodeText
         */
        getParentNames: function (node, nodeText) {
            if (node != null) {
                nodeText += node.name + ">";
                var parentNode = node.getParentNode();
                vm.getParentNames(parentNode,nodeText);//递归
            }else {
                if(nodeText!=""){
                    nodeText=nodeText.substring(0,nodeText.length-1);
                }
                //根节点
                vm.parentNames = nodeText;
            }
        },
        /**
         * 菜单类型改变时的处理
         */
        menuTypeChange:function(){
            var menuType = $("#type").val();
            if(menuType=="1"){
                this.isShowMenuIconAndUrl = true;
            }else{
                this.isShowMenuIconAndUrl = false;
            }
        },
        validate: function () {
            var menuName = $("#name").val();
            if(menuName==""){
                layer.alert('请输入菜单名称!',{
                    title: '提示框',
                    icon:0
                });
                $("#name").focus();
                return false;
            }
            //如果是按钮，这必须选择上级菜单
            var menuType = $("#type").val();
            if(menuType=="2"){
                var parentMenuName= $("#parentName").val();
                if(parentMenuName==""){
                    layer.alert('请选择上级菜单!',{
                        title: '提示框',
                        icon:0
                    });
                    $("#type").focus();
                    return false;
                }
            }
            return true;
        },

        /**
         * 保存
         */
        save:function(){
            if(this.validate()==false){
                return;
            }

            var saveUrl = g_comm.manager_url+'/sysResource/add';
            var id = $("#id").val();
            if(id!=""){
                //编辑菜单状态
                saveUrl = g_comm.manager_url+'/sysResource/update';
            }
            var _this = this;
            $.ajax({
                url:saveUrl,
                data:$("#menuForm").serialize(),
                success:function(result){
                    $("#id").val("");//清空id，避免被当成编辑模式
                    if(result.code == 0){
                        layer.closeAll(); //疯狂模式，关闭所有层
                        layer.msg('操作成功！', {icon: 1});
                        //重新刷新数据
                        $('#tbSysMenu').bootstrapTable('refresh');
                        _this.initZtree();
                    }else{
                        layer.alert(result.msg,{
                            title: '提示框',
                            icon:0
                        });
                        return false;
                    }
                }
            });
        },
        /**
         * 绑定事件
         */
        bindEvent: function () {
            $("#type").on("change", function () {
                vm.menuTypeChange();
            });
        },
        /**
         * 搜索
         */
        search:function () {
            $('#tbSysMenu').bootstrapTable('refreshOptions',{pageNumber:1});
        },
        /**
         * 清除权限标识
         */
        clearPerm:function(){
            //获取选中的行
            var selectRows = $('#tbSysMenu').bootstrapTable('getSelections');
            if(selectRows.length==0){
                layerAlert("请选择要操作的资源!");
                return;
            }
            var ids = "";
            $(selectRows).each(function (index, obj) {
                ids+=obj.id+",";
            });
            ids=ids.substring(0,ids.length-1);
            parent.layer.confirm("你确定是要清除访问权限吗！", {btn: ['确定','取消']},
                function(){//确定事件
                    //关闭confirm Dialog
                    parent.layer.closeAll('dialog');
                    $.ajax({
                        url: g_comm.manager_url+"/sysResource/clearPerm",
                        data: {"ids":ids},
                        success: function(r){
                            if(r.code == 0){
                                layer.msg('操作成功！', {icon: 1});
                                //重新刷新数据
                                $('#tbSysMenu').bootstrapTable('refresh');
                            }else{
                                layerAlert(r.msg);
                            }
                        }
                    });
                });
        }
    },
    mounted:function () {
        this.initTable();
        this.initZtree();
        this.bindEvent();
    }
});